# -*- coding: utf-8 -*- 
from m_database import MyDatabaseTmall
import m_downloader
import m_spider
import time


'''
import sys
default_encoding = 'utf-8'

if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)
'''

RUNDATE=''#运行日期


def scrapyEngine(task_list):
    mydatabase=MyDatabaseTmall()
    scheduler=Scheduler()#队列
    
    for t in task_list:
        scheduler.add_pre(t)
        
    while scheduler.count>0:
        curtask=scheduler.use()#从队列中取得任务
        mydownloader=eval('m_downloader.'+curtask.to_downloader)(curtask)#取得下载件组
        for j in mydownloader.netreturns:#遍列下载件组
            myspider=eval('m_spider.'+j.task.to_spider)(j)#处理一个下载件，取得爬虫
            if myspider!=None:#如果存在爬虫结果，执行
                if len(myspider.tasks)!=0:#将爬虫对象中的任务放到任务队列中去
                    scheduler.addlist(myspider.tasks)
                if len(myspider.products)!=0:#将爬虫对象中的产品组放到清洗件中去
                    for curproduct in myspider.products:
                        sql=curproduct.getInsertSQL()
                        print sql
                        try:
                            mydatabase.runsqlsolo(sql)
                        except:
                            time.sleep(30)
                            mydatabase.runsqlsolo(sql)
                            
            #break
            
            
                            
            #break      
class Scheduler(object):#队列
    def __init__(self):
        self.tasks=[]
        self.count=0
    def add(self,task):
        self.tasks.append(task)
        self.count+=1
        #print 'add '+task.url
    def add_pre(self,task):
        t=[task]
        self.tasks=t+self.tasks
        self.count+=1
        #print 'add '+task.url
    def addlist(self,tasklist):
        for i in tasklist:
            if i.ordertag==0:
                self.add_pre(i)
            else:
                self.add(i)        
    def use(self):
        if self.count>0:
            curtask=self.tasks[0]
            self.tasks.pop(0)
            self.count-=1
            #print 'use '+curtask.url
            return curtask
        else:
            return None
        
class Task(object):#队列中任务
    def __init__(self):
        self.taskname=None
        self.to_downloader=None#下一环节使用下载件
        self.to_spider=None#再下一环节默认使用解释件，不作为使用依据，只作参考
        self.url=None
        self.cookie=None#如果存在下载类需要加载
        self.header=None#如果存在下载类需要加载
        self.addin_data=None#需要传入的值，以字典形式传
        self.ordertag=None#0加在最前面,1加在最后面
        
            
        
